; 这个测试直接使用linux的系统调用实现
[bits 32]  ; 标记是32位的程序

section .text  ; 标记是代码段
global main  ; 导出符号main
main:
    mov eax, 4  ; 4是系统调用wirte
    mov ebx, 1  ; 写文件stdout
    mov ecx, message  ; 写文件的buffer
    mov edx, message_end - message  ; 长度
    int 0x80  ; 触发调用内部中断，也就是系统调用，执行打印

    mov eax, 1  ; 1是系统调用exit
    mov ebx, 0  ; 参数0，退出状态
    int 0x80  ; 表示执行系统调用

section .data  ; 标记是数据段
    message db "hello by test_call_sys", 10, 13, 0  ; 字符串数据，10是/r 13是/n 0是字符串结束符
    message_end:  ; message结束位置的标签

; 使用以下命令编译：
; nasm -f elf32 test_call_sys.asm -o test_call_sys.o
; -f elf32是指定输出为elf格式的可重定位文件
; 然后使用gcc链接
; gcc -m32 test_call_sys.o -o test_call_sys -static
; 如果不加static选项会报重定位只读section .text段的告警 /usr/bin/ld: test_call_sys.o: warning: relocation in read-only section `.text'
; 然后执行./test_call_sys 可见正确打印message内容
